package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;

/**
 * 给你两个二进制字符串，返回它们的和（用二进制表示）。
 * 输入为 非空 字符串且只包含数字 1 和 0。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 力扣_67_二进制求和 {
    public static void main(String[] args) {

        System.out.println(new 力扣_67_二进制求和().addBinary("11","1"));
        System.out.println(new 力扣_67_二进制求和().addBinary("1010","1011"));

    }
    /**
     题目：给你两个二进制字符串，返回它们的和（用二进制表示）。
     输入为 非空 字符串且只包含数字 1 和 0。

     示例 1:
     输入: a = "11", b = "1"
     输出: "100"

     示例 2:
     输入: a = "1010", b = "1011"
     输出: "10101"

     分析：
     1.双指针从后向前遍历，记录进位，SB倒转

     边界值 & 注意点：
     1.
     **/
    public String addBinary(String a, String b) {
        int lengtha = a.length()-1;
        int lengthb = b.length()-1;
        int flage= 0;
        StringBuilder sb = new StringBuilder();
        while (lengtha>=0 || lengthb>=0 || flage==1){
            int sum =flage;
            if(lengtha>=0 && a.charAt(lengtha) =='1')sum++;
            if(lengthb>=0 && b.charAt(lengthb)=='1')sum++;
            lengtha --;lengthb--;
            flage = sum/2;
            sb.append(sum%2);
        }
        return sb.reverse().toString();
    }
}
